
package Control;

import View.limFornecedor;
import Model.Fornecedor;
import Utilitaria.ConexaoBanco;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.JOptionPane;


public class ctrFornecedor {

    private ctrPrincipal controlPrincipal;
    public Vector vetFornecedor;
    private ConexaoBanco objConexao;

    public ctrFornecedor (ctrPrincipal objCtrPrincipal, ConexaoBanco objConexao) throws SQLException {
        this.objConexao = objConexao;
        this.recuperaFornecedor();
        controlPrincipal = objCtrPrincipal;
        limFornecedor limFornecedor = new limFornecedor(this);
    }

    public void cadastraFornecedor(String NomeFantasia, String marca, String CNPJ, String Contato, String Email, String website, String Tel_celular, String Tel_comercial, String End_rua, String End_bairro, String End_cep, String End_cidade) throws SQLException, Exception {

        int codFornecedor = this.ultimoCodigo() + 1;
        Fornecedor obj = new Fornecedor(codFornecedor, NomeFantasia, marca, CNPJ, Contato, Email, website, Tel_celular, Tel_comercial, End_rua, End_bairro, End_cep, End_cidade );
        executaInsert(obj);
        recuperaFornecedor();

    }

    private void executaInsert(Fornecedor obj) throws Exception {

        String sqlFornecedor = "insert into tbl_fornecedor values (" +obj.getaCodFornecedor()+
                ", '"+obj.getaFantasia()+"', '"+obj.getaMarca()+"', '"+obj.getCNPJ()+"', '"+obj.getaContato()+
                "', '"+obj.getaEmail()+"', '"+obj.getAwebsite()+
                "', '"+obj.getaTel_celular()+ "', '"+obj.getaTel_comercial()+
                "', '"+obj.getaEnd_rua()+"', '"+obj.getaEnd_bairro()+"', '"+obj.getaEnd_cep()+"', '"+obj.getaEnd_cidade()+"')";
        objConexao.statement.executeUpdate(sqlFornecedor);

    }

    public void alterarFornecedor(String CodFornecedor, String NomeFantasia, String contato, String marca, String Email, String CNPJ,
            String website, String Tel_celular,String Tel_comercial, String End_rua, String End_bairro, String End_cep, String End_cidade)throws Exception  {

        int index = 0;
        int aux = 0;
        int codBuscado = Integer.parseInt(CodFornecedor);
        do {
            Fornecedor obj = (Fornecedor) vetFornecedor.elementAt(index);
            if(obj.getaCodFornecedor() == codBuscado){
                String sqlFornecedor = "UPDATE tbl_fornecedor SET "+
                                "for_nfantasia = '"+ NomeFantasia +"', "+
                                "for_marca = '"+ marca +"', "+
                                "for_cnpj = '"+ CNPJ +"', "+
                                "for_ncontato = '"+ contato +"', "+
                                "for_email = '"+ Email +"', "+
                                "for_site = '"+ website +"', "+
                                "for_tcelular = '"+ Tel_celular +"', "+
                                "for_tcomercial = '"+ Tel_comercial +"', "+
                                "for_erua = '"+ End_rua +"', "+
                                "for_ebairro = '"+ End_bairro +"', "+
                                "for_ecep = '"+ End_cep +"', "+
                                "for_ecidade = '"+ End_cidade +"' "+
                                "where for_id = "+ codBuscado;
                if (objConexao.statement.executeUpdate(sqlFornecedor) == 1)
                    aux = 1;
                else
                    throw new Exception("");
            }
            index++;
        } while (aux == 0 && index <= vetFornecedor.size());
        this.recuperaFornecedor();

    }

    public void excluir(String strCodFornecedor ) throws SQLException {

        Fornecedor objBuscado = null;
        int codFornecedor = Integer.parseInt(strCodFornecedor);
        int index = 0;
        do{
            objBuscado = (Fornecedor) vetFornecedor.elementAt(index);
            if(objBuscado.getaCodFornecedor() == codFornecedor) {
                int opcao_escolhida = JOptionPane.showConfirmDialog(null,"Deseja excluir o cadastro de "
                        +objBuscado.getaFantasia()+" ?", "Confirmação de exclusão", JOptionPane.YES_NO_OPTION);
                if (opcao_escolhida == JOptionPane.YES_OPTION){
                    int exclusao = objConexao.statement.executeUpdate("DELETE FROM tbl_fornecedor Where for_id = " + codFornecedor);
                    this.recuperaFornecedor();
                    JOptionPane.showMessageDialog(null,"Exclusão realizada com sucesso.");
                }
                else
                    return;
            }
            index++;
        } while (index <= vetFornecedor.size());
    }

    public ArrayList<String> pesquisa_digitacao(int tamanho_pesquisa, String strBuscada) throws Exception {

        String igual = "n";
        Fornecedor objFornecedor = null;
        int index = 0;
        while(igual.equals("n") && index <= vetFornecedor.size()) {
            objFornecedor = (Fornecedor)vetFornecedor.elementAt(index);
            String pesquisado= objFornecedor.getaFantasia().substring(0, tamanho_pesquisa);
            if (pesquisado.equals(strBuscada))
                igual = "s";
            else
                index++;
        }
        if(igual.equals("s"))
            return montaResult(objFornecedor);
        else
            throw new Exception ("");

    }

    private void recuperaFornecedor() throws SQLException{

        vetFornecedor = new Vector();
        objConexao.executeQuery("SELECT * FROM tbl_fornecedor");
        Fornecedor objFornecedor;
        while (objConexao.resultset.next()) {
            objFornecedor = new Fornecedor (
                        Integer.parseInt(objConexao.resultset.getString("for_id")),

                        objConexao.resultset.getString("for_nfantasia"),
                        objConexao.resultset.getString("for_marca"),
                        objConexao.resultset.getString("for_cnpj"),
                        objConexao.resultset.getString("for_ncontato"),
                        objConexao.resultset.getString("for_email"),
                        objConexao.resultset.getString("for_site"),
                        objConexao.resultset.getString("for_tcelular"),
                        objConexao.resultset.getString("for_tcomercial"),
                        objConexao.resultset.getString("for_erua"),
                        objConexao.resultset.getString("for_ebairro"),
                        objConexao.resultset.getString("for_ecep"),
                        objConexao.resultset.getString("for_ecidade"));
            vetFornecedor.addElement(objFornecedor);
        }

    }

    public ArrayList<String> primeiroFornecedor () throws Exception {

        Fornecedor firstElement = (Fornecedor) vetFornecedor.firstElement();
        if(firstElement != null)
            return montaResult(firstElement);
        else
            throw new Exception ();

    }

    public ArrayList<String> ultimoFornecedor () throws Exception {

        Fornecedor lastElement = (Fornecedor) vetFornecedor.lastElement();
        if(lastElement != null)
            return montaResult(lastElement);
        else
            throw new Exception ();

    }

    public ArrayList<String> proximoFornecedor (String strCodAnterior) throws Exception {

        Fornecedor objBuscado = null;
        int codAnterior = Integer.parseInt(strCodAnterior);
        int aux = 0, index = 0;
        do{
            Fornecedor objAnterior = (Fornecedor) vetFornecedor.elementAt(index);
            if(objAnterior.getaCodFornecedor() == codAnterior) {
                objBuscado = (Fornecedor)vetFornecedor.elementAt(index + 1);// index + 1 implica o objeto posterior no vetor
                aux = 1;
            }
            index++;
        } while (aux == 0 && index <= vetFornecedor.size());
        if (aux == 1)
            return montaResult(objBuscado);
        else
            throw new Exception ("");

    }

   public ArrayList<String> anteriorFornecedor (String strCodSucessor) throws Exception {

        Fornecedor objSucessor = null;
        Fornecedor objBuscado = null;
        int codSucessor = Integer.parseInt(strCodSucessor);
        int aux = 0, index = 0;
        do{
            objSucessor = (Fornecedor) vetFornecedor.elementAt(index);
            if(objSucessor.getaCodFornecedor() == codSucessor && index == 0)
                index = -2; //recebe -2 para que no final do lop possa receber + 1 e sair do lop -> implica que o codigo passado para a função já é o codigo do primeiro registro
            if(objSucessor.getaCodFornecedor() == codSucessor){
                objBuscado = (Fornecedor)vetFornecedor.elementAt(index - 1);// index - 1 implica o objeto anterior no vetor
                aux = 1;
            }
            index++;
        } while (aux == 0 && index != -1);
        if (aux == 1)
            return montaResult(objBuscado);
        else
            throw new Exception ("");

    }

    private ArrayList<String> montaResult (Fornecedor obj){

        ArrayList<String> result = new ArrayList<String>();
        result.add(String.valueOf(obj.getaCodFornecedor()));
        result.add(obj.getaFantasia());
        result.add(obj.getaContato());
        result.add(obj.getCNPJ());
        result.add(obj.getAwebsite());
        result.add(obj.getaMarca());
        result.add(obj.getaEmail());
        result.add(obj.getaTel_celular());
        result.add(obj.getaTel_comercial());
        result.add(obj.getaEnd_rua());
        result.add(obj.getaEnd_bairro());
        result.add(obj.getaEnd_cep());
        result.add(obj.getaEnd_cidade());
        return result;

    }

    private int ultimoCodigo( ) throws SQLException {

        int last = 0;
        objConexao.executeQuery("SELECT MAX(for_id) FROM tbl_fornecedor");
        if (objConexao.resultset.last())
            last = objConexao.resultset.getInt("MAX(for_id)");
        return last;

    }
}




